<?php
/**
 * Lớp này được dùng để thực hiện việc kiểm tra các hàm
 * @version 1.0
 * @package EMX
 */
class clsCommons
{	
	    /**
	     * Phương thức fnUnUnicode chuyển các ký tự unicode thành ký tự thường không dấu
	     * @param string $str chuỗi unicode đưa vào
	     * @return string
	     * return lại chuỗi đã được chuyển đổi
	     */
	function fnsUnUnicode($str) 
	{
		$str = trim($str);	
		//chuyen thanh a
		$str_array = array("?","?","á","�?","à","À","ạ","Ạ","ấ","Ấ","ậ","Ậ","ã","Ã","â","Â","ả","Ả","a","A");
		$str = str_replace($str_array,"a",$str);
		//chuyen thanh i
		$str_array = array("í","�?","ĩ","Ĩ","ị","Ị","ì","Ì","i","I");
		$str = str_replace($str_array,"i",$str);
		//chuyen thanh d
		$str_array = array("d","�?","đ");
		$str = str_replace($str_array,"d",$str);
		//chuyen thanh o
		$str_array = array("ó","Ó","ò","Ò","�?","Ờ","�?","Ỏ","�?","Ọ","ố","�?","ỗ","Ỗ","õ","Õ","ơ","Ơ","ô","Ô","ộ","Ộ","ồ","Ồ","ớ","Ớ","o","O");
		$str = str_replace($str_array,"o",$str);
		//chuyen thanh e
		$str_array = array("é","É","ệ","Ệ","ẽ","Ẽ","ê","Ê","ẹ","Ẹ");
		$str = str_replace($str_array,"e",$str);
		//chuyen thanh u
		$str_array = array("ú","Ú","ù","Ù","ủ","Ủ","ứ","Ứ","ừ","Ừ","u","U","u","U","ự","Ự","ữ","Ữ");
		$str = str_replace($str_array,"u",$str);
		//chuyen thanh y
		$str_array = array("ý","�?","ỳ","Ỳ","ỵ","Ỵ","ỹ","Ỹ","y","Y");
		$str = str_replace($str_array,"y",$str);
		//chuyen thanh _	
		$str = str_replace(" ","_",$str);
		return strtolower($str);	

	}
	
	    /**
	     * Phương thức fnsIsImage kiểm tra xem giá trị đưa vào có phải là ảnh không
	     * @param string $str tên ảnh cần kiểm tra
	     * @return boolean
	     * return true nếu là ảnh, false nếu không
	     */
	function fnsIsImage($str)
	{
		if(strpos($str,".")<=0) return false;
		$str=substr($str,strpos($str,".")+1);
		if($str=='jpg' || $str=='bmp' || $str=='jpeg' || $str=='png' || 'gif') return true;
		else return false;
	}
	
	/**
	* Thay đổi các ký tự đặc biệt để tránh tấn công sql Inject trong các mã lệnh đưa lên
	*@param string $string  là chuỗi được đưa lên bởi người dùng
	*@return  string chuỗi đã thêm các  ký  tự \ để tránh bị tấn công
	**/
	function fnsDescripReplace($string)
	{
		return mysql_escape_string ($string);
	}
	
	/**
	*Phương thức fnsNumberReplace kiểm tra chuỗi đưa vào có phải là kiểu số không
	* @param string $string chuỗi cần kiểm tra
	* @return  string chuỗi đã được đưa về định dạng số
	* return giá trị của chuỗi nếu đó là chuỗi số, 0 nếu đó không phải là chuỗi số
	*/
 	function fnsNumberReplace($string)
	{
	if($string==""){
		return 0;
	}
	if(is_numeric($string)){
		return mysql_real_escape_string($string);
	}
		return 0;
	}
	
	/*
	* thay đổi chuỗi đưa vào tránh tấn công sql inject
	*@param string $string chuỗi theo định dạng ngày tháng
	*@return chuỗi theo định dạng ngày tháng được thêm \ chông tấn công sql inject
	*/
	function fnsDateReplace($string)
	{
		return  mysql_real_escape_string($string);
	}
	/**
	 * Chuyển đổi chuỗi thành dạng tránh tấn công sql inject, và cắt ngắn chuỗi theo yêu cầu
	 * @param string $string chuỗi cần xử lý
	 * @param string $count  số ký tự cần lấy, nếu <= 0 sẽ lấy toàn bộ chuỗi. Mặc định =0
	 * @return  string chuỗi đã được xử lý
	 */
	function fnsStringReplace($string,$count=0)
	{		
		$string = str_replace("'","''",$string);
		if (isset ($count)==false)
		{
			$count = 0;
		}
		if ($count > 0)
		{
			$string = substr($string,0,$count);
		}
		return mysql_real_escape_string($string);
	} 

	/**
	 * Chuỗi với \ đầu các ký tự đặc biệt
	 * @param string $string chuỗi cần xử lý
	 * @return string chuỗi sau khi đã được xử lý
	 */
	function fnsSave($str)
	{
		if (@get_magic_quotes_gpc()) 
		{
	        		$str = stripslashes($str);
		}
	
		if (!is_numeric($str)) {
			$str = mysql_real_escape_string($str);
		}
		return $str; 
	}

	/**
	 * Kiểm tra tồn tại bản ghi theo yêu cầu câu lệnh sql
	 * @param string $sql chuỗi yêu cầu dữ liệu
	 * @return bool trả lại true nếu có bản ghi thỏa mãn, ngược lại là false
	 */
	function fnsIsRecord($sql){
		$result=mysql_query($sql) or die("Not query fns_IsRecord");
		if(mysql_num_rows($result)) return true;
		else return false;
	}
	
	/**
	     * tr
	     * @param string $sql, sql statement
	     * @return an array(array()[,array()])
	 */
	function fnsRows($sql)
	{
		$result=mysql_query($sql) or die("Not query fns_Rows");
		$rows=array();
		while($r=mysql_fetch_array($result)){
			$rows[]=$r;
		}
		return $rows;
	}
	
    /**
     * Trả lại 1 mảng danh sách các trường từ kết quả câu lệnh sql
     * @param string $sql, sql statement
     * @param string $Field, name field of table inside sql statement
     * @return a array(array()[,array()])
     */	
	function fnsRowsField($sql,$Field)
	{
		$result=mysql_query($sql) or die("Not query fns_Rows");
		$rows=array();
		while($r=mysql_fetch_array($result))
		{
			$rows[]=$r[$Field];
		}
		return $rows;
	}

	/**
     * Trả lại tổng số bản ghi vừa thực hiện ở câu lệnh sql
     * @param string $sql câu lệnh sql
     * @return tổng số bản ghi
     */		
	function fnsTotalRows($sql)
	{
		$result=mysql_query($sql) or die("Not query fns_TotalRows");
		$total=mysql_num_rows($result);
		return $total;
	}
	/**
	 *Phương thức fnsFormatDate chuyển đổi kiểu ngày-tháng-năm thành năm - tháng - ngày
	 * @param string $date ngày cần chuyển đổi
	 * @return  string
	 * return chuỗi ngày vừa được chuyển đổi 
	 */	
	function fnsFormatDate($date)
	{
		$str=$date;
		$i=strpos($str,'/');
		$dd=substr($str,0,$i);
		$str=substr($str,$i+1);
		$i=strpos($str,'/');
		$mm=substr($str,0,$i);
		$YYYY=substr($str,$i+1);
		/*	
		echo "dd: $dd <br>";
		echo "mm: $mm <br>";
		echo "YYYY: $YYYY <br>";
		*/
		$str=$YYYY."-".$mm."-".$dd;
		//echo $str;
		return $str;
	}
	/**
	 *Phương thức fnsRandDigit tạo ra 1 chuỗi số bất kỳ từ 1 số có sẵn
	 * @param int $max giá tri lớn nhất mà chuỗi số được tạo ra 
	 * @param int $min giá trị nhỏ nhất mà chuỗi số được tạo ra
	 * @return  int
	 */		
	function fnsRandDigit($min,$max,$num)
	{
		$result='';
		for($i=0;$i<$num;$i++){
			$result.=rand($min,$max);
		}
		return $result;	
	}
	

	
	/*	
	function fns_Is_Date_EN(strDate){
		return true;
	}
	
	function fns_Convert_Date_VN_EN(strDate){
		return true;
	}	
	*/
	
	/**
     * Phương thức fnsFormatDateEngils trả lại chuỗi ngày theo định dạng Year-month-day
     * @param string $strDate is a string date neeeded to proceesing
     * @return a date wth format(year-month-day)
     */			
	function fnsFormatDateEnglish($strDate){
		$str = strtok($strDate,"-");
		$day = $str;	
		$str = strtok("-");
		$month = $str;
		$str = strtok("-");
		$year = $str;
		return ($year."-".$month."-".$day);
	}	
    /**
     * Phương thức fnsDateBefor tìm ra ngày trước đó của ngày đưa vào
     * @param string $strDate ngày đưa vào
     * @return string
     * return ngày trước đó
     */		
	function fnsDateBefor($strDate)
	{
		if (ereg("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})",$strDate,$regs)) {
			$day = (int)($regs[1]);
			$month = (int)($regs[2]);
			$year = (int)($regs[3]);
		}	   
		//Ngay hom truoc
		if ($day != 1) {
			$day--;		
		}
		else {		
			if ($month==1) {
				$day=31;
				$month=12;
				$year--;			
			}		
			elseif ($month==3) {
				$tg = $year%4;
				$tg1 = $year%100;			
				$tg2 = $year%400;					
				if(!($tg==0 && ($tg1!=0 || $tg2==0))) {
					$day=28;				
				}
				else {
					$day=29;								
				}
				$month=2;
			}
			elseif (ereg("[2,4,6,8,9,11]",$month)) {
				$day=31;
				$month--;
			}		
			elseif (ereg("[5,7,10,12]",$month)) {
				$day=30;
				$month--;
			}		
		}
		return  $day."-".$month."-".$year;
	}
	
    /**
     * Phương thức fnsWeekBefor tìm ra tuần trước đó của ngày đưa vào
     * @param string $strDate ngày đưa vào
     * @return string
     * return tuần trước đó
     */			
	function fnsWeekBefor($strDate){
		if (ereg("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})",$strDate,$regs)) {
			$day = (int)($regs[1]);
			$month = (int)($regs[2]);
			$year = (int)($regs[3]);
		}	 
		//tuan truoc
		if (day>7)	{
			$day = $day -7;
		}
		else {
			if ($month==1) {	
				$day = 31 + $day -7;
				$month = 12;
				$year--;
			}
			elseif ($month==3) {
				$tg = $year%4;
				$tg1 = $year%100;
				$tg2 = $year%400;	
				if(!($tg==0 && ($tg1!=0 || $tg2==0))) {
					$day=28 + $day - 7;
				}
				else {
					$day=29 + $day - 7;
				}
				$month=2;
			}
			elseif (ereg("[2,4,6,8,9,11]",$month)) {
				$day=31 + $day - 7;
				$month--;
			}
			elseif (ereg("[5,7,10,12]",$month)) {
				$day=30 + $day - 7;
				$month--;
			}				
		}
		return  $day."-".$month."-".$year;
	}
    /**
     * Phương thức fnsMonthBefor tìm ra tháng trước đó của ngày đưa vào
     * @param string $strDate ngày đưa vào
     * @return string
     * return tuần trước đó
     */	
	function fnsMonthBefor($strDate)
	{
		if (ereg("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})",$strDate,$regs)) {
			$day = (int)($regs[1]);
			$month = (int)($regs[2]);
			$year = (int)($regs[3]);
		}	   
		if ($month==1) {	
			$month = 12;
			$year--;
			return  $day."-".$month."-".$year;		
		}			
		if ($month==3) {		
			if ($day>28) {			
				$tg = $year%4;
				$tg1 = $year%100;
				$tg2 = $year%400;	
				if(!($tg==0 && ($tg1!=0 || $tg2==0))) {
					$day=28;
				}
				else {
					$day=29;
				}
			}
			$month--;
			return  $day."-".$month."-".$year;
		}
		if (ereg("[2,4,6,8,9,11]",$month)) {
			$month--;
			return  $day."-".$month."-".$year;
		}
		if (ereg("[5,7,10,12]",$month)) {
			if ($day==31) {
				$day=30;
			}
			$month--;	
			return  $day."-".$month."-".$year;		
		}	
		return "";	
	}

    /**
     * Phương thức fnsYearBefor tìm ra năm trước đó của ngày đưa vào
     * @param string $strDate ngày đưa vào
     * @return string
     * return năm trước đó
     */		
	function fnsYearBefor($strDate){
		if (ereg("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})",$strDate,$regs)) {
			$day = (int)($regs[1]);
			$month = (int)($regs[2]);
			$year = (int)($regs[3]);
		}	
		if ($month==2 && $day>27) {		
			$tg = ($year-1)%4;
			$tg1 = ($year-1)%100;
			$tg2 = ($year-1)%400;	
			if(!($tg==0 && ($tg1!=0 || $tg2==0))) {
				$day=28;
			}
			else {
				$day=29;
			}		
		}
		$year--;
		return  $day."-".$month."-".$year;	
	}
    /**
     * Phương thức fnsFormatPrice chuyển đổi chuỗi số thành kiểu tiền
     * @param string $strPrice ichuỗi số cần chuyển đổi
     * @return string
     * return chuỗi số đã được chuyển đổi thành kiểu tiền
     */
	function fnsFomatPrice($strPrice) 
	{
		$strPrice = trim($strPrice);
		$j = (strlen($strPrice)-(strlen($strPrice)%3))/3;				
		for($i=1;$i<=$j;$i++) {
			$strPrice=substr_replace($strPrice,'.',(strlen($strPrice)-$i*3-$i+1),0);
		}
		if($strPrice[0]=='.') {
			$strPrice=substr($strPrice,1);
		}
		return $strPrice;
	}
    /**
    * Phương thức fnsAfterDay tìm ra ngày sau đó của chuỗi ngày đưa vào
    * @param string $strDate chuỗi ngày đưa vào
    * @param in $NumberDay số ngày sau đó
    * @return  string
    * return số ngày sau đó	
    */	
	function fnsAfterDay($strDate,$NumberDay) {
		$strDate = trim($strDate);
		$NumberDay = trim($NumberDay);
		//tach ngay thang nam
		if (ereg("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})",$strDate,$regs)) {
			$day = (int)($regs[1]);
			$month = (int)($regs[2]);
			$year = (int)($regs[3]);
		}	
		//tao mang so ngay cac thang cua nam 
		$array_month = array(31,29,31,30,31,30,31,31,30,31,30,31);	
		$tg = $year%4;
		$tg1 = $year%100;
		$tg2 = $year%400;	
		if(!($tg==0 && ($tg1!=0 || $tg2==0))) {
			$array_month[1]=28;
		}
		
		//after n days
		$day = $day + $NumberDay;
		if($month==12) {
			if($day>31) {
				$day=$day-31;
				$month=1;
				$year++;
			}
		}
		else {
			while($day>$array_month[$month-1]) {
				$day=$day-$array_month[$month-1];
				$month++;
			}
		}
		return $day."-".$month."-".$year;		
	}
	    /**
	    * Phương thức fnsAfterDaysYMD tìm ra ngày sau đó và chuyển về định dạng Năm-Tháng-Ngày
	    * @param  $strDate chuỗi ngày đưa vào
	    * @param  số ngày cần tính sau đó
	    * @return  String
	    * return chuỗi ngày sau đó
	    */
	function fnsAfterDaysYMD($strDate,$NumberDay) {
		$strDate = trim($strDate);
		$NumberDay = trim($NumberDay);
		//tach ngay thang nam
		if (ereg("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})",$strDate,$regs)) {
			$day = (int)($regs[1]);
			$month = (int)($regs[2]);
			$year = (int)($regs[3]);
		}	
		//tao mang so ngay cac thang cua nam 
		$array_month = array(31,29,31,30,31,30,31,31,30,31,30,31);	
		$tg = $year%4;
		$tg1 = $year%100;
		$tg2 = $year%400;	
		if(!($tg==0 && ($tg1!=0 || $tg2==0))) {
			$array_month[1]=28;
		}
		
		//after n days
		$day = $day + $NumberDay;
		if($month==12) {
			if($day>31) {
				$day=$day-31;
				$month=1;
				$year++;
			}
		}
		else {
			while($day>$array_month[$month-1]) {
				$day=$day-$array_month[$month-1];
				$month++;
			}
		}
		if($day<10) $day="0".$day;
		if($month<10) $month="0".$month;
		return $year."-".$month."-".$day;		
	}

	/**
     * Return a booolean value after check a string is a mail
     * @param string $str is a string neeeded to proceesing
     * @return false if $Email is not valid, else return true
     */		
	function fnsSeparate($lsX,$lsY)
	{
		$x=strpos($lsX,$lsY,1)+strlen($lsY)+1;
		$y=strpos($lsX,"(",$x-1);
		return substr($lsX,$x,$y-$x-1);
	}
     /**
     * Phương thức fnsCheckEmail kiểm tra định dạng email có đúng hay không
     * @param string $str chuỗi email cần kiểm tra
     * @return boolean
     * return true nếu chuỗi email là hợp lệ, false nếu không hợp lệ
     */		
	function fnsCheckEmail($Email)
	 {
  		if (ereg("[[:alnum:]]+@[[:alnum:]]+\.[[:alnum:]]+", $Email)) 
		{
    		return true;
  		} else 
		{
    		return false;
		}
	}
     /**
     * Phương thức fnsCheckIsDateVN kiểm tra chuỗi ngày đưa vào có phải là định đạng ngày của Việt Nam không
     * @param string $strDate chuỗi ngày cần kiểm tra
     * @return boolean
     * return true nếu hợp lệ, false nếu không hợp lệ
     */	
	function fnsCheckIsDateVN($strDate)
	{
		if (ereg ("([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})", $strDate, $regs)) 
		{
			$day = $regs[1];
			$month = $regs[2];
			$year = $regs[3];
			if ($day < 1 || $day > 31) return false;
			if ($month < 1 || $month >12 ) return false;
			if (($month == 4 || $month == 6 || $month == 9 || $month == 11) && ($day == 31)) return false;
			// check for february 29th
			if ($month == 2)
				{ 
				 $isleap = ($year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0));
			
				if ($day > 29 || ($day==29 && !$isleap)) return false; 
				}
			if (($year<1900) || ($year>2099)) return false;
			return true; // date is valid
		} else {
			return false;}
	}
    /**
     * Phương thức fnsCheckAlphaNum kiểm tra chuỗi đầu vào chỉ chứa các ký tự từ aA-zZ và 0-9 
     * @param string $alpha chuỗi cần kiểm tra
     * @return boolean
     * return true nếu hợp lệ, false nếu không hợp lệ
     */		
	function fnsCheckAlphaNum($alpha)
	 {
  		if (ereg("^[[:alnum:]]{0,12}$", $alpha)) 
		{
    		return true;
  		} else {
    		return false;
  				}
	}
	
    /**
     * Phương thức fnsCheckNumFloat kiểm tra số đưa vào có phải là kiểu float hay không
     * @param string $str chuỗi cần kiểm tra
     * @return boolean
     * return true nếu đúng là kiểu float, false nếu không phải
     */	
	function fnsCheckNumFloat($str)
	{
		$ch = substr($str,0,1);
		if (($ch != '+') && ($ch != '-') && ($ch < "0" || $ch > "9"))
		{				
			return false;
		}
				$count = 0;
				$count1 = 0;
				$ch1 = str_split($str);
				for ($i = 1; $i < strlen($str); $i++)
				{	
					if (($ch1[$i] < "0" || $ch1[$i] > "9") && ($ch1[$i] != '.') )
						{
							$count = $count + 1;
						}
					if ($ch1[$i] == '.')
						{
							$count1 = $count1 + 1;
						}
				}
					if (($count == 0) && ($count1 <= 1))
						{	
						return true;
						}
					else
						{
						return false;
						}

	}
	
	function encryptpass($pass)
	{
		$strPass = $pass;
		return $strPass;
	}
	/**
     * redirect to another page
	 * @param string $url is  a link
     */	
	function fnsDoReturn($url){
		echo"<script language='javascript'>"
			."window.location = '$url'"
			."</script>";
	}
    /**
     * Phương thức fnsCheckNumInt kiểm tra số đưa vào có phải là kiểu int hay không
     * @param string $str chuỗi cần kiểm tra
     * @return boolean
     * return true nếu đúng là kiểu float, false nếu không phải
     */		
	function fnsCheckNumInt($str)
	{
		$ch = substr($str,0,1);
		if (($ch != '+') && ($ch != '-') && ($ch < "0" || $ch > "9"))
		{			
			return false;
		}

				$count = 0;
				$count1 = 0;
				$ch1 = str_split($str);
				for ($i = 1; $i < strlen($str); $i++)
				{		
					if (($ch1[$i] < "0" || $ch1[$i] > "9") && ($ch1[$i] != '.') )
						{
							$count = $count + 1;
						}
					if ($ch1[$i] == '.')
						{
							$count1 = $count1 + 1;
						}
				}

					if (($count == 0) && ($count1 == 0))
						{	
						return true;
						}
					else
						{
						return false;
						}

	}
	function fnsCheckSubString ($aStrSub,$aStrCheck){
		$count = 0;
		for ($i = 0;$i<sizeof($aStrSub);$i++){
			for ($j=0;$j<sizeof($aStrCheck);$j++){
				if ($aStrSub[$i] == $aStrCheck[$j] ){
					$count++;
				}
			}
		}
		if ($count == sizeof($aStrSub)){
			return true;
		}
		return false;
	}
	
}



